home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / pcl / betanote.txt < prev    next >
Text File  |  1993-07-07  |  39KB  |  767 lines

  1.         Release notes for CMU Common Lisp 16f, 11 December 92
  2.  
  3. The changes between 16e and 16f are almost exclusively bug-fixes.  When we
  4. announce a version 17 beta, 16f will probably become the default release
  5. (replacing 15e).  The PCL has been upgraded from "March 92 (2a)" to 
  6. "March 92 (2c)", which provides some bug-fixes; also, all of the patches in
  7. the March-92-PCL-bugs file have been applied.
  8.  
  9. Enhancements:
  10.  -- PROVIDE & REQUIRE are now back in the system, since proposed ANSI CL has
  11.     reinstated them as deprecated features.  See the doc strings for these
  12.     functions and EXT:DEFMODULE.
  13.  -- The SPARC dynamic heap size limit has been doubled from 64meg to 128meg.
  14.  
  15. Pretty printer:
  16.  -- Fixed a bug in pprint-let that caused to to barf on (let (nil) ...).
  17.  -- Fixed pprint-lambda-list to print a space before the dot when the tail of
  18.     the lambda list is shared.  In other words, print (foo . #1=(bar baz))
  19.     instead of (foo. #1=(bar baz)).
  20.  -- Added an additional use of ~^ in pprint-flet so that (flet (nil) ...)
  21.     doesn't flame out.
  22.  -- Make pretty printer properly process pprint tabs when output is forced.
  23.  -- In format pprint logical blocks, fixed ~^ to act like
  24.     PPRINT-EXIT-IF-LIST-EXHAUSTED instead of blowing out to some containing
  25.     directive.
  26.  
  27. Compiler:
  28.  -- Fixed compiler internal error with dead-code deletion of top-level code.
  29.  -- Bind *gensym-counter* instead of setting it so that compiling doesn't
  30.     globally reset the gensym counter.
  31.  -- Fixed problem with interpreted LOAD-TIME-VALUE causing undefined function
  32.     VALUE-CELL-REF errors.
  33.  -- Preserve the arglist in interpreted functions for DESCRIBE, etc.
  34.  -- Gag bound-but-not-referenced warnings when the EXT:INHIBIT-WARNINGS
  35.     optimize quality is 3.
  36.  -- Fixed a problem with register allocation conflict analysis which appeared
  37.     when a function was called with ~>= 50 arguments.
  38.  -- Fixed bug with optimization of tail local calls.
  39.  -- Fixed interpreted PROCLAIM/DECLAIM to ignore
  40.     START-BLOCK, END-BLOCK and declared DECLARATION declarations.
  41.     Changed the unrecognized proclamation error to be a warning.
  42.  -- Fixed float heap allocation to not wedge when the store causes a trap
  43.     (SPARC only.)
  44.  
  45. Trace:
  46.  -- Added pretty-printer directives so that arg lists and results print better.
  47.  -- Fixed UNTRACE not to flame out when untracing untraced functions.
  48.  -- Fixed bug with redefining function traced with encapsulation (e.g.
  49.     interpreted functions.
  50.  
  51. Misc bug fixes:
  52.  -- Fixed I/O timeout handling (e.g. for CLX) to correctly borrow from the
  53.     timeout seconds when computing the new value for the timeout microseconds.
  54.  -- Restored proper (prompt) handling of queued CLX events in SERVE-EVENT
  55.  -- Alien enums always take up an int to be compatable with C.  Also,
  56.     sort the from-alist so that enum aliens are unparsed in a canonical
  57.     format.
  58.  -- When doing macro destructuring, check to see if some part of a lambda-list
  59.     is a LIST before checking to see if it is a SYMBOL, because we want NIL to
  60.     act like the empty list, and not an attempt to bind NIL.  
  61.  -- Fixed PACKAGE-ERROR to have a PACKAGE slot instead of a PATHNAME slot.
  62.  -- Changed DOLIST not to introduce the spurious let around the result form
  63.     when there is no result form.  Also, just read the var in the spurious
  64.     let, instead of using IGNORABLE, since the var might be special.
  65.  -- In complex DEFSETF, don't bother creating temp vars for constants.  This
  66.     is necessary so that keywords stay keywords, and are not changed to
  67.     gensyms.
  68.  
  69. Enhancements:
  70.  -- Changed the backquote expanded functions (backq-list, ...) from being
  71.     inline functions to compiler-macros, since although the optimizer does
  72.     eventually get the right code, it has to work awful hard.  Changed BREAK
  73.     to accept a condition as well as a format string.
  74.  -- Exported EXT:CONNECT-TO-UNIX-SOCKET and EXT:CREATE-UNIX-SOCKET, which had
  75.     been forgotten before.  Added code to CONNECT-TO-UNIX-SOCKET so that Unix
  76.     domain sockets are available for connecting to other processes.
  77.  -- Removed sys:*task-data* and sys:*task-notify* because they aren't used
  78.     even under Mach.
  79.  
  80.  
  81.  
  82.         Release notes for CMU Common Lisp 16e, 5 August 92
  83.  
  84. 16e is primarily a bug-fix release.  The main changes from 16d are:
  85.  -- CLOS support is from March 92 PCL (2a).  This is a new version of PCL
  86.     developed by Richard Harris which incorporates many bug-fixes and ANSI
  87.     compliance cleanups.  He has also back-merged the CMU changes into his
  88.     sources so that we can release future PCLs without time-consuming merging.
  89.     On the downside, there are a couple of new bugs (discrimination on 
  90.     pcl::structure-object doesn't always work; generic functions which contain
  91.     methods which discriminate on both null and list sometimes do not work).
  92.     Patches for these bugs are available in March-92-PCL-bugs in the CMU CL
  93.     release area and by anonymous ftp from host parcftp.xerox.com 
  94.     (13.1.64.94), in the directory pub/pcl/.
  95.  -- TRACE has been reimplemented, has a new syntax and new features.
  96.  -- The hardcopy and info documentation has been updated.  Note that it
  97.     describes some debugger capabilities (breakpoints) which won't appear
  98.     until version 17.
  99.  
  100. The fasl file format is the same as for 16d, but some code may need to be
  101. recompiled.  In particular, the expansion of PPRINT-LOGICAL-BLOCK has changed.
  102.  
  103.  
  104. March 92 PCL highlights:  (see notes.text in the sources for details)
  105.  -- This version of PCL is much closer than previous versions of PCL to the
  106.     metaobject protocol specified in "The Art of the Metaobject Protocol",
  107.     chapters 5 and 6, by Gregor Kiczales, Jim des Riveres, and Daniel G.
  108.     Bobrow.
  109.  -- You can use structure-class as a metaclass to create new classes.
  110.     Classes created this way create and evaluate defstruct forms which
  111.     have generated symbols for the structure accessors and constructor.
  112.  -- Various optimization of instance variable access, both inside and outside
  113.     of methods.
  114.  -- More work (lookups and precompilation) is done at compile and load time,
  115.     rather than run-time.
  116.  
  117.  
  118. New TRACE:
  119.  
  120. Trace has been substantially rewritten, and has a new syntax as well as new
  121. functionality:
  122.  -- Tracing of compiled functions is now implemented using breakpoints.
  123.     Breakpoints destructively modify the code object, causing all calls to the
  124.     function to be trapped, instead of only those calls that indirect through
  125.     the symbol.  This makes TRACE more useful for debugging programs that use
  126.     data structures containing function values, since you can now trace
  127.     anonymous functions and macros.  Also, the breakpoint stops the function
  128.     after the arguments have been parsed, so arguments can accessed by name in
  129.     the debugger or in TRACE options.
  130.  -- Depending on the ENCAPSULATE option and DEBUG:*TRACE-ENCAPSULATE-DEFAULT*,
  131.     encapsulation may be used instead.  This is the default for closures,
  132.     generic functions and interpreted functions.
  133.  -- TRACE options are no longer set off by extra parens, and you can specify
  134.     global trace options which affect all functions traced by a particular
  135.     call to TRACE.
  136.  -- Conditional breakpoints now work much better than before.
  137.  -- *DEBUG-PRINT-LEVEL*, -LENGTH* are used instead of a separate
  138.     *TRACE-PRINT-LEVEL*, etc.
  139.  
  140. Here is the documentation string (see also the hardcopy/info documentation):
  141.    TRACE {Option Global-Value}* {Name {Option Value}*}*
  142.    TRACE is a debugging tool that prints information when specified functions
  143.    are called.  In its simplest form:
  144.        (trace Name-1 Name-2 ...)
  145.  
  146.    TRACE causes a printout on *TRACE-OUTPUT* each time that one of the named
  147.    functions is entered or returns (the Names are not evaluated.)  The output
  148.    is indented according to the number of pending traced calls, and this trace
  149.    depth is printed at the beginning of each line of output.
  150.  
  151.    Options allow modification of the default behavior.  Each option is a pair
  152.    of an option keyword and a value form.  Options may be interspersed with
  153.    function names.  Options only affect tracing of the function whose name they
  154.    appear immediately after.  Global options are specified before the first
  155.    name, and affect all functions traced by a given use of TRACE.
  156.  
  157.    The following options are defined:
  158.  
  159.    :CONDITION Form
  160.    :CONDITION-AFTER Form
  161.    :CONDITION-ALL Form
  162.        If :CONDITION is specified, then TRACE does nothing unless Form
  163.        evaluates to true at the time of the call.  :CONDITION-AFTER is
  164.        similar, but suppresses the initial printout, and is tested when the
  165.        function returns.  :CONDITION-ALL tries both before and after.
  166.  
  167.    :WHEREIN Names
  168.        If specified, Names is a function name or list of names.  TRACE does
  169.        nothing unless a call to one of those functions encloses the call to
  170.        this function (i.e. it would appear in a backtrace.)  Anonymous
  171.        functions have string names like "DEFUN FOO".
  172.  
  173.    :BREAK Form
  174.    :BREAK-AFTER Form
  175.    :BREAK-ALL Form
  176.        If specified, and Form evaluates to true, then the debugger is invoked
  177.        at the start of the function, at the end of the function, or both,
  178.        according to the respective option.
  179.  
  180.    :PRINT Form
  181.    :PRINT-AFTER Form
  182.    :PRINT-ALL Form
  183.        In addition to the usual prinout, he result of evaluating Form is
  184.        printed at the start of the function, at the end of the function, or
  185.        both, according to the respective option.  Multiple print options cause
  186.        multiple values to be printed.
  187.  
  188.    :FUNCTION Function-Form
  189.        This is a not really an option, but rather another way of specifying
  190.        what function to trace.  The Function-Form is evaluated immediately,
  191.        and the resulting function is traced.
  192.  
  193.    :ENCAPSULATE {:DEFAULT | T | NIL}
  194.        If T, the tracing is done via encapsulation (redefining the function
  195.        name) rather than by modifying the function.  :DEFAULT is the default,
  196.        and means to use encapsulation for interpreted functions and funcallable
  197.        instances, breakpoints otherwise.  When encapsulation is used, forms are
  198.        *not* evaluated in the function's lexical environment, but DEBUG:ARG can
  199.        still be used.
  200.  
  201.    :CONDITION, :BREAK and :PRINT forms are evaluated in the lexical environment
  202.    of the called function; DEBUG:VAR and DEBUG:ARG can be used.  The -AFTER and
  203.    -ALL forms are evaluated in the null environment.
  204.  
  205.  
  206. Assorted bug fixes and enhancements:
  207.  
  208. System code:
  209.  -- Changed default base file name for LOAD-FOREIGN to be argv[0] rather than
  210.     being hard-wired to "lisp".
  211.  -- Fixed a bad declaration which caused garbage collection to fail if more
  212.     than MOST-POSITIVE-FIXNUM bytes had been consed since process creation.
  213.  -- Changed GET-INTERNAL-RUN-TIME to use UNIX-FAST-GETRUSAGE to avoid
  214.     number-consing and generic arithmetic.  Also, rearranged the computation
  215.     so that the time is correctly computed for up to 457 days, instead of only
  216.     71 minutes.
  217.  -- Merged Miles' fix to MAKE-PATHNAME so that it knows the difference between 
  218.     an arg being NIL and being unsupplied.
  219.  -- Some partial fixes to circular printing (the #1=#1# bug).
  220.     PPRINT-LOGICAL-BLOCK no longer checks the list argument for CAR
  221.     circularity, now that OUTPUT-OBJECT does it for us.
  222.  -- Fixed reader dispatch macro characters to be case-insensitive, and to
  223.     disallow digits as sub-characters.
  224.  -- Changed #A reader to allow arbitrary sequences instead of just lists.
  225.  -- RUN-PROGRAM now gives a proper error message when "fork" fails (i.e. too
  226.     many processes.)
  227.  -- Fixed a bug in initialization of saved cores which caused the old
  228.     environment to be left on the end of EXT:*ENVIRONMENT-LIST*.  One symptom
  229.     was that RUN-PROGRAM would run programs with strange environment values
  230.     based on those in effect at the time the core was saved.  In particular,
  231.     Lisp subprocesses (i.e. Hemlock slaves) might get the wrong value of
  232.     CMUCLLIB, which caused the slave to die before connecting.
  233.  -- SYSTEM:SERVE-EVENT (and XLIB:EVENT-CASE, etc.) now correctly handle
  234.     non-integer timeouts.  Added declarations to improve the efficiency of
  235.     event handling.
  236.  -- Fixed some bugs in UNIX-SELECT which could cause Lisp to hang when more
  237.     than 32 files were open.  Also, improved efficiency in this case.
  238.  -- Merged Olssons fix to WITH-ENABLED-INTERRUPTS to not try to change
  239.     interrupt characters anymore.
  240.  -- A number of bug-fixes for breakpoint support in compiled code (but there
  241.     are still problems with arbitrary breakpoints.)
  242.  -- Fixed DI:FRAME-CATCHES
  243.  
  244. CLX:
  245.  -- Fixed the implementation-dependent pixarray copying routines (for
  246.     GET-IMAGE, etc.) so that they don't occasionally trash memory, and are
  247.     actually faster.
  248.  -- Fixed the definition of the ANGLE type (used by DRAW-ARC, etc.) to work
  249.     regardless of the kind of real number (single or double float, rational,
  250.     etc.)
  251.  -- Fixed several places in image operations where values that could really
  252.     be negative were declared to be non-negative.
  253.  
  254. Compiler:
  255.  -- Fixed a bug which caused an internal error whenever a call to random
  256.     was compiled and the argument type wasn't known to be either a float or
  257.     an integer.
  258.  -- Fixed a bug which caused an internal compiler error when a value that
  259.     wasn't used had an unproven type assertion.
  260.  -- Fixed some more dead-code deletion bugs.
  261.  -- Fixed a problem with the new "assignment" optimization of local function
  262.     call where the compiler could get assertion failures such as tail-sets not
  263.     being equal.
  264.  -- Fixed a few places where reoptimization wasn't being triggered when it
  265.     should have been.
  266.  -- You can now have a TAGBODY with more than one tag that is non-locally
  267.     exited to.  Evidently this never worked...
  268.  -- Some changes in debug-info format related to breakpoint support.
  269.  
  270. Misc:
  271.  -- Fixed some Hemlock Dired commands to know that PATHNAME-DIRECTORY is
  272.     now a list, not a vector.
  273.  -- Fixed the bin/sample-wrapper script to use "$@" instead of $* so that
  274.     arguments are properly passed through.
  275.  
  276.  
  277.         Release notes for CMU Common Lisp 16d, 30 May 92
  278.  
  279. 16d is our first version 16 general release, and incorporates many changes not
  280. present in the 15 series.  It is currently fairly close to our current
  281. internal development (alpha) systems, and is thus less stable.  The major
  282. changes are:
  283.     New Aliens
  284.     New pathnames
  285.     New pretty printer
  286.     New format
  287.     R5.0 CLX.  
  288.     5/1/90  May Day PCL (REV 4b)
  289.     Revised manual
  290.  
  291. The fasl file format is nominally compatible with version 15, but the pathname
  292. change affects any pathname constants in fasl files, which includes the
  293. defined-from information present in every fasl file.  It is probably a good
  294. idea to recompile everything.
  295.  
  296. CLX and Hemlock are now optional.  When CMU CL is installed, the maintainer can
  297. elect not to load CLX and Hemlock -- this saves 7 megabytes of disk and
  298. improves memory usage somewhat.  See the installation section of the README
  299. file for details.
  300.  
  301. The ``CMU Common Lisp User's Manual'' has been updated to be more helpful for
  302. non-CMU users.  The new manual also documents the new Alien facility for
  303. foreign function calls and data structure access.  The manual is now formatted
  304. with Mike Clarkson's LaTeXinfo package, so a consistent version of the
  305. documentation is available online in Gnu info format.  See `doc/cmu-user.ps'
  306. and `doc/cmu-user.info'.
  307.  
  308.  
  309. General system code:
  310.  
  311. ANSI cleanups:
  312.  -- ANSI Compiler macros are now implemented: see COMPILER-MACRO-FUNCTION,
  313.     COMPILER-MACROEXPAND, COMPILER-MACROEXPAND-1 and DEFINE-COMPILER-MACRO.
  314.  -- Fixed things that invoke *MACROEXPAND-HOOK* to coerce it to a function
  315.     before calling it.
  316.  -- Fixed MACRO-FUNCTION to take an environment argument.
  317.  -- SYMBOL-MACROLET now accepts declarations.
  318.  -- SHADOW now accepts strings in addition to symbols.
  319.  -- Added UPGRADED-ARRAY-ELEMENT-TYPE and UPGRADED-COMPLEX-PART-TYPE.
  320.  -- IGNORABLE is now in the LISP package instead of the EXT package.
  321.  -- ADJUST-ARRAY has been updated to allow adjusting of arrays which were
  322.     not created with :adjustable non-nil to be adjusted to new dimensions.
  323.  -- ADJUSTABLE-ARRAY-P has been updated correspondingly. It returns T if
  324.     adjust ADJUST-ARRAY would return an EQ array.
  325.  -- The BASE-CHARACTER type has been renamed to BASE-CHAR.
  326.  -- The REAL type and REALP function are now implemented.
  327.  -- Changed the default structure printer to print slot names as keywords
  328.     instead of unqualified symbols.
  329.  
  330. Enhancements:
  331.  -- Added MAYBE-INLINE declaration for GET, PUT, etc., so that these
  332.     functions can be inline expanded according to the compilation policy.
  333.  -- Added some type declarations so that GET-INTERNAL-REAL-TIME doesn't cons.
  334.  -- Process the command line before printing the herald so that we can eval
  335.     some form and quit without printing anything.
  336.  -- SET now protects against setting T, NIL, and keywords.  (SETF
  337.     SYMBOL-FUNCTION) now expands into FSET, which protects against defining
  338.     NIL.
  339.  -- Substantially rearranged function describing to make it more consistent,
  340.     and added support for describing interpreted functions.
  341.  -- PURIFY is now called multiple times during system building to improve
  342.     locality.  
  343.  -- (EVAL-WHEN (EVAL) ...) is now actually eval'ed.
  344.  
  345. Bug fixes:
  346.  -- Fixed bug in NTH-VALUE where it expanded into bogus code unless ``n'' was
  347.     a constant integer.
  348.  -- Fixed FMAKUNBOUND to return the symbol instead of T.
  349.  -- Allocate memory as executable so that the OS knows to maintain cache
  350.     consistency.
  351.  -- Changed DESCRIBE to allow T or NIL as the stream argument.
  352.  
  353. Load enhancements and cleanups:
  354.  -- The initial value of *LOAD-VERBOSE* is now T.  Additionally, LOAD no
  355.     longer always binds *LOAD-VERBOSE* and *LOAD-PRINT*.  Now it only
  356.     binds them when :VERBOSE or :PRINT are explicity supplied.  Therefore, you
  357.     can set either of these in your init file and it will take effect.
  358.  -- Normally when *LOAD-VERBOSE* is T, only the file name is printed.
  359.     Formerly, the loaded stream was always printed, whereas now a stream is
  360.     printed only when the stream is not a file stream.
  361.  -- Added ANSI features *LOAD-TRUENAME*, *LOAD-PATHNAME* and *LOAD-PRINT*.
  362.  -- As per ANSI, bind *READTABLE* to itself to make assignments file-local.
  363.  -- Added new variables EXT:*SOURCE-FILE-TYPES* and EXT:*OBJECT-FILE-TYPES*.
  364.     When no file type is specified, LOAD tries the types in these lists to
  365.     locate the source and object files.  LOAD now recognizes source types "l",
  366.     "cl" and "lsp" in addition to "lisp".
  367.  -- The compiler OPTIMIZE policy is now bound during load, so proclamations in
  368.     a file don't leave the global policy clobbered when the load is finished.
  369.  -- Changed the :IF-SOURCE-NEWER option to signal an error and use restarts,
  370.     rather than PROMPT-FOR-Y-OR-N.  Fixed the load source case to actually
  371.     load the source, rather than loading the object as a source file...
  372.  -- Changed load to deal with source files having NIL type more reasonably.
  373.  -- If a wild pathname is given to LOAD, all files matched will be loaded.
  374.  -- Proceeding from nonexistent file errors has been improved.  It is no longer
  375.     assumed that missing files are always source files.  Added condition
  376.     restarts for missing files.
  377.  -- Improved formatting of error and warning messages.
  378.  
  379.  
  380. Garbage collection:
  381.  -- Changed the minimal ROOM output to include all easily computed information
  382.     including whether GC is disabled.  The verbose ROOM now conses less.
  383.  -- Removed the :ENABLE-GC SAVE-LISP option, as it's no longer needed.
  384.     Garbage collection is now correctly enabled in cores which have been saved
  385.     and then restarted.
  386.  -- Added EXT:BYTES-CONSED-BETWEEN-GCS, a function that returns (and sets when
  387.     used with setf) *BYTES-CONSED-BETWEEN-GCS*.  Additionally, it changes
  388.     *GC-TRIGGER* immediately to reflect the new values of *bytes-consed...*.
  389.  -- TIME now displays the GC run-time.
  390.  -- Added EXT:*GC-RUN-TIME* with accumulates the INTERNAL-RUN-TIME spent doing
  391.     garbage collection.  Added declarations to make EXT:GET-BYTES-CONSED more
  392.     efficient.
  393.  -- The top-level REP loop now zeros the unused non-zero portion of the
  394.     control stack to discourage spurious garbage retention.
  395.  -- The garbage collector now closes open file streams when it reclaims them.
  396.  
  397.  
  398. Packages:
  399.  -- The LISP and USER packages have been renamed to COMMON-LISP and
  400.     COMMON-LISP-USER.  LISP and USER are nicknames, so they can still be used.
  401.  -- The LISP package namespace has been cleaned up somewhat.  For example,
  402.     *DESCRIBE-PRINT-LEVEL* is no longer exported from LISP.
  403.  -- The Mach/Unix division in the package system has been clarified a great
  404.     deal.  Unix specific features have been moved from the MACH package to the
  405.     UNIX package.  Mach specific features have been left in (or moved to) the
  406.     MACH package.  For example, all standard Unix syscalls are related
  407.     definitions are un UNIX, whereas vm_statistics remains in MACH and GR-CALL
  408.     has been moved to MACH.
  409.  
  410. SETF cleanups:
  411.  -- Changed GET-SETF-METHOD-MULTIPLE-VALUE to try to macroexpand-1 the form
  412.     when it's an atom in case it's a symbol-macro as per the X3J13 cleanup
  413.     SYMBOL-MACROLET-SEMANTICS:SPECIAL-FORM.  Now you can safely INCF, etc.
  414.     symbol macros where the macroexpansion has side effects.
  415.  -- Fixed SETF of GETF to evaluate the various parts in the correct order as
  416.     per X3J13 cleanup SETF-SUB-METHODS:DELAYED-ACCESS-STORES.
  417.  -- X3J13 cleanup SETF-MULTIPLE-STORE-VARIABLES:
  418.     Extend the semantics of the macros SETF, PSETF, SHIFTF, ROTATEF, and
  419.     ASSERT to allow "places" whose SETF methods have more than one "store
  420.     variable".  In such cases, the macros accept as many values from the
  421.     newvalue form as there are store variables.  As usual, extra values
  422.     are ignored and missing values default to NIL.
  423.  -- Extended the long form of DEFSETF to allow the specification of more
  424.     than one "store variable", with the obvious semantics.
  425.  -- GET-SETF-METHOD signals an error if there would be more than one
  426.     store-variable. 
  427.  
  428.  
  429. Printer:
  430.  
  431. Almost all of the printing code has been rewritten/restructured to support
  432. all of the printing features added to the language.  Some highlights:
  433.  -- *PRINT-READABLY* is now supported.
  434.  -- *PRINT-CIRCLE* works irrespective of *PRINT-PRETTY*.  Note: the default
  435.     structure printer currently does not work when *PRINT-CIRCLE* is true: you
  436.     get #1=#1#.
  437.  -- *PRINT-LEVEL* abbreviation now works automatically inside structure
  438.     printers.
  439.  -- XP has been replaced with a native pretty printer that is fully
  440.     integrated with the rest of the system.  This Supports the ANSI
  441.     pretty-printing interface instead of the old Waters XP interface.  Existing
  442.     uses of the old interface will need to be updated to use the new names.
  443.  -- The pretty-printer now unparses backquote forms on printing.  To retain
  444.     this information, the backqoute read macro no longer expands into LIST,
  445.     CONS, etc.  Internal functions are used instead.
  446.  -- The macros WITH-STANDARD-IO-SYNTAX and PRINT-UNREADABLE-OBJECT have
  447.     been added.
  448.  -- All new format.  Supports the FORMATTER macro and all the pretty-printing
  449.     directives.  FORMAT has extended to accept a function as the format control
  450.     (as an alternative to a string.)
  451.  -- Added support for READTABLE-CASE in symbol printing.  Printing when
  452.     *PRINT-CASE* is :CAPITALIZE and *PRINT-ESCAPE* is NIL is now slightly
  453.     different than before.  Added some missing array type declarations in
  454.     symbol printing.
  455.  
  456. Bug fixes:
  457.  -- Fixed a bug which caused some float printing format directives to
  458.     infinitely loop when a fixed-width field overflowed.
  459.  -- Specify stream when printing unbound marker.
  460.  -- Fixed FORMAT to override printer control variables when printing float
  461.     exponents so that they are always printed in decimal, etc.
  462.  
  463.  
  464. Reader:
  465.  
  466. ANSI Cleanups:
  467.  -- *READ-EVAL* is now supported.  If a #. is encountered while *READ-EVAL*
  468.     is NIL (default T), an error is signaled.  This intended to allow
  469.     ``secure'' READ-based command interfaces to be written.
  470.  -- READTABLE-CASE is now supported.
  471.  -- The reader now signals the correct type of error when things go wrong
  472.     instead of always signaling a simple-error.
  473.  -- Changed the return value of SET-SYNTAX-FROM-CHAR from NIL to T as per X3J13
  474.     cleanup RETURN-VALUES-UNSPECIFIED:SPECIFY.  [Hard to believe nobody has
  475.     complained about not conforming to this one.]
  476.  
  477. Bug fixes:
  478.  -- Fixes to several bugs with respect to #+, #-.  In particular, stacked
  479.     conditionals like "#+foo #-bar baz" now work 
  480.  -- #n= and #n# now detect more error conditions and work on structures.
  481.  -- # is now a non-terminating macro character, so foo#bar is read as a
  482.     symbol.
  483.  -- Added Ted's changes to make INTERNAL-READ-EXTENDED-TOKEN work when there
  484.     are `|' escapes.  The main significance of this is that #+nil '|foo;bar|
  485.     and #:|foobar| now work properly.  Also changed this function to recognize
  486.     unquoted colons so that #:foo:bar will error, but not #:foo\:bar.
  487.  
  488. Enhancement:
  489.  -- Export new variable *ignore-extra-close-parentheses* if true (the default),
  490.     extra close parens are only a warning, not an error.  Previously unmatched
  491.     close parens were quietly ignored.
  492.  
  493.  
  494. Pathnames:
  495.  
  496. This release supports all the new CltL2 pathname features except for logical
  497. pathnames.  Following is an overview of the new pathname support.
  498.  
  499. Programs that actually conform to the CLtL1 pathname spec will have very few
  500. problems.  However, the CLtL1 spec was extremely vague, and CMU CL did not
  501. make use of much of the allowed flexibility, so many technically non-portable
  502. programs previously worked under CMU CL.
  503.  
  504. The main incompatible changes from CLtL1 to CLtL2:
  505.  -- Symbols are no longer acceptable filenames.
  506.  -- PATHNAME-HOST may be any object.
  507.  -- :UNSPECIFIC is now a legal pathname component.
  508.  -- MERGE-PATHNAMES now recognizes relative pathnames and treats them
  509.     specially. 
  510.  
  511. The format of directories is now specified (to be a list in a certain format.)
  512. This required an incompatible change from the previous practice of using a
  513. vector PATHNAME-DIRECTORY and using "DEFAULT" or :ABSOLUTE in the
  514. PATHNAME-DEVICE to indicate relative and absolute pathnames.
  515.  
  516. In a related change, the CMU SEARCH-LIST extension was changed so that the
  517. search-list now appears in the PATHNAME-DIRECTORY as:
  518.     (:ABSOLUTE #<Search-list "name"> ...)
  519.  
  520. Other changes to search-lists:
  521.  -- (SETF SEARCH-LIST) now accepts a string or pathname, and converts it into
  522.     a one-element list.
  523.  -- Search-list elements are now canonicalized to pathnames rather than to
  524.     strings. 
  525.  -- Instead of returning NIL, SEARCH-LIST now signals an error when it is
  526.     called on an undefined search list. 
  527.  -- SEARCH-LIST-DEFINED-P is a predicate that tells if the search list is
  528.     currently defined.
  529.  
  530. New features which are now supported:
  531.  -- Wildcard pathnames are now fully supported.  In addition to allowing :WILD
  532.     in any pathname component, "extended wildcards" such as "foo*.*" are also
  533.     supported.  A consequence of this is that PATTERN objects may appear in
  534.     wildcard pathname components instead of strings.  See PATHNAME-MATCH-P and
  535.     TRANSLATE-PATHNAME.
  536.  -- As a CMU CL extension, a wildcard pathname may be used as the argument to
  537.     any filesystem interface (like OPEN) as long as it matches only one file.
  538.  -- The pathname :COMMON case mechanism provides a way around the problems of
  539.     portably specifying string pathname components in the presence of operating
  540.     systems with differing preferred case in their filesystem.  An uppercase
  541.     string "LISP" is mapped to the "customary case" (lowercase on unix.)  
  542.     Lowercase is also inverted: "readme" becomes "README".  Mixed case is left
  543.     alone.  Note that this mechanism is explicitly enabled by supplying :CASE
  544.     :COMMON to functions such as MAKE-PATHNAME.  The default is the old
  545.     behavior (:CASE :LOCAL).
  546.  
  547. Also, DIRECTORY now actually returns the TRUENAME of each file (as it was
  548. always supposed to do.)  If a matched file is a symbolic link, the truename may
  549. be a file in some other directory that doesn't even match the pattern.  The old
  550. behavior can be obtained by specifying :FOLLOW-LINKS NIL.
  551.  
  552. The new wildcard pathname mechanism has not yet been used to replace the old
  553. single-wildcard matching in Hemlock DIRED, etc.
  554.  
  555.  
  556. Debugger:
  557.  -- Added Miles' changes to keep errors and warnings on one line if they fit.
  558.  -- The debugger now starts up with the error frame as the current frame, so
  559.     it is no longer necessary to manually skip over internal frames resulting
  560.     from the error system invocation.
  561.  -- Fixed some debugger bugs that appeared when debugging interpreted code.
  562.  -- Added ``DESCRIBE'' debugger command.
  563.  -- Merged Miles' changes that allow the use of restart names as debugger
  564.     commands.
  565.  -- Changed SHOW-RESTARTS to also display the restart name (but only if it's
  566.     not shadowed by a higher priority restart).  Changed the restart command
  567.     to look for restarts by name if a symbol is typed.
  568.  -- Bind *CURRENT-LEVEL* to 0, *PRINT-READABLY* to nil, and *READ-EVAL* to T
  569.     when entering the debugger to make sure things print as expected.
  570.  
  571. The debugger programmer (DEBUG-INTERNALS) interface is now documented in the
  572. User's Manual.  This interface allows the coding of debuggers and debugger
  573. extensions without requiring an intimate understanding of the compiler and
  574. run-time system.  Be warned that DI features (such as breakpoints) not used by
  575. the current debugger may not work very well (wait for version 17.)
  576.  
  577. Debug internals changes:
  578.  -- DI:DEBUG-FUNCTION-FUNCTION is now implemented.
  579.  -- Added DI:FLUSH-FRAMES-ABOVE for cleaning up frames to be bound to
  580.     DEBUG:*STACK-TOP-HINT*.
  581.  
  582.  
  583. Defstruct:
  584.  
  585. Various fixes and enhancements to defstruct slot parsing and inclusion.   
  586. It now works to define structures such as:
  587.     (defstruct super a)
  588.     (defstruct (sub1 (:conc-name super)) one)
  589.     (defstruct (sub2 (:conc-name super)) two)
  590.     (super-a (make-sub1))
  591.  
  592. previously, a definition such as for SUB2 would define SUPER-A to be a
  593. SUB2-specific function, which could then no longer be used on other types.  The
  594. spec doesn't clearly say that such a construct is legal, but its use seems
  595. fairly common.
  596.  
  597. Also, slot parsing is now more rigorous.  Unrecognized slot options cause an
  598. error, as does a slot spec like: (defstruct foo (a :type t))
  599.  
  600. Fasl dumping of constant structures has been fixed to conform to X3J13.  The
  601. main significance of this is that DEFSTRUCT structures are no longer dumpable
  602. by default.  However, the generic function MAKE-LOAD-FORM isn't really used.
  603. Instead, a new defstruct option, :MAKE-LOAD-FORM-FUN, has been added that can
  604. be used to specify a function that acts like a MAKE-LOAD-FORM method.  When we
  605. have a CLOS that supports STRUCTURE-CLASS, the default method for
  606. MAKE-LOAD-FORM will use this information instead of having the compiler use it
  607. directly.  The old behavior can be enabled on a structure by structure basis by
  608. using the :MAKE-LOAD-FORM-FUN defstruct option:
  609.     (defstruct (foo (:make-load-form-fun :just-dump-it-normally))
  610.       ...)
  611.  
  612.  
  613. Compiler:
  614.  
  615. Cleanups:
  616.  -- Added the LOAD-TIME-VALUE support special form.
  617.  -- Displaced or adjustable arrays and vectors with fill pointers can now be
  618.     dumped in fasl files, but are converted to simple array with the same
  619.     elements.
  620.  -- Arrays of floats are left as arrays of floats instead of being
  621.     converted into arrays of element-type T that just so happen to hold a
  622.     bunch of floats.
  623.  -- Changed IGNORE and IGNORABLE to recognize #'fn-name for declaring that
  624.     local functions are not used.  Exported IGNORABLE from LISP.
  625.  
  626. New optimizations:
  627.  -- Iterations written using tail recursion are now optimized through a
  628.     special-casing of local functions where all calls but one are
  629.     tail-recursive self-calls.  Such functions are compiled with no
  630.     environment manipulation, resulting in the same code as explicit
  631.     iteration.
  632.  -- Loop rotation (Knuth "while" loop optimization) been added.  This is the
  633.     optimization that negates the loop exit test and places it at the end of
  634.     the loop, and then jumps there at loop entry.  Note that this is part of
  635.     control optimization, and not simply a recoding of certain iteration
  636.     macros.  In fact, for historical reasons DO, etc. already had the exit
  637.     test negated, but the compiler was cleverly un-negating the test.
  638.  -- Flow analysis now recognizes function calls and special forms which do
  639.     not yield any value because they unwind or signal an error.  This results
  640.     in improved code for error checks, since the compiler can get by with
  641.     fewer unconditional branches.  A function can be declared not to return by
  642.     declaring its result type to be NIL (not to be confused with NULL).  If a
  643.     function declared NIL does return, an error will be signalled.
  644.  -- Added derive-type methods for ASIN, ACOS, ACOSH, ATANH and SQRT which
  645.     figure out whether the result type is real on the basis of the argument
  646.     range.  Also, the result of ATAN is always real, so we don't need a result
  647.     type assertion.
  648.  -- Added optimization which deletes MULTIPLE-VALUE-BINDs when all
  649.     variables have been deleted.
  650.  -- Eliminated some spurious checking of the result types of safe VOPs (such
  651.     as the SPARC tadd for fixnum arithmetic.)
  652.  -- Transform uses of the SEARCH generic sequence function on simple strings
  653.     into a call to a more efficient string-specific function.
  654.  -- Added multiplier recoding of (UNSIGNED-BYTE 32) multiplication.  This
  655.     converts 32 bit (or smaller) unsigned multiplication by any compile-time
  656.     constant into a shift-add sequence.  This is much faster when the constant
  657.     is a near power of two or when general multiplication is slow (as on the
  658.     SPARC.)
  659.  -- Added comprehensive handling of arithmetic and logical identities when
  660.     an arg is -1, 0 or +1.
  661.  -- Added a RANDOM derive-type method: (random 13) is (integer 0 12).
  662.  
  663.  
  664. Enhancements:
  665.  -- Changed the compiler to temporarily increase *BYTES-CONSED-
  666.     BETWEEN-GCS* by a factor of 4 during compilation of each top-level form,
  667.     instead of turning off all garbage collection.
  668.  -- Bind *PRINT-LINES* around compiler error output to
  669.     *ERROR-PRINT-LINES*.
  670.  -- Do not warn about undefined variables, functions or types when the
  671.     INHIBIT-WARNINGS OPTIMIZE quality is 3.
  672.  -- Some optimizations are now considered "important"; failure of important
  673.     optimizations causes an efficiency note even when speed=inhibit-warnings
  674.     (i.e. by default.)
  675.  -- Print a error summary even when *COMPILE-VERBOSE* is false.  (This is only
  676.     printed when there are errors, so this doesn't seem a violation of the
  677.     spirit of the spec.)
  678.  
  679. Bug fixes:
  680.  -- Merged Miles' fix to disassembly of the MIPS coprocessor move instructions.
  681.  -- Fixed spelling of "efficency" in exported variables such as
  682.     *EFFICIENCY-NOTE-COST-THRESHOLD*
  683.  -- Fixed some cases where incomplete optimization could happen.
  684.  -- Fixed some arithmetic "identities" that failed to preserve the sign of
  685.     -0.0.
  686.  -- Fixed TYPES-INTERSECT to consider any supertype of T to definitely
  687.     intersect with anything (even an unknown type.)
  688.  -- Fixed a problem where inconsistent declarations could fail to be detected
  689.     at compile time.
  690.  -- Fixed the VALUES transform (which discards unused subforms) to work
  691.     on (VALUES).
  692.  -- More bug fixes to dead code deletion.
  693.  -- Fixed a problem where a special binding would not be removed on exit from
  694.     the scope if there was no code in the scope (e.g. it had all been
  695.     deleted.)
  696.  -- Fixed handling of named (DEFCONSTANT) constants so that EQ
  697.     relationships are properly preserved.
  698.  
  699.  
  700. Extensions:
  701.  
  702.  -- Export FEATUREP from EXT.  This takes a feature expression and tests it
  703.     against the value of *FEATURES*.  Allow LISP:AND, LISP:OR, and LISP:NOT in
  704.     features lists in addition to :AND, :OR, and :NOT.  This makes featurep
  705.     useful outside of #+ and #-.
  706.  -- The encapsulation mechanism (similar to advise facilities) has been
  707.     revamped to work on SETF function names as well as symbols.
  708.     EXT:ENCAPSULATED-DEFINITION
  709.        Returns whatever definition is stored for name, regardless of whether
  710.        it is encapsulated.  Unlike FDEFINITION, this does not strip off the
  711.        encapsulation.  This is SETF'able.
  712.     EXT:ENCAPSULATE
  713.        Replaces the definition of name with a function that binds name's
  714.        arguments a variable named argument-list, binds name's definition to a
  715.        variable named basic-definition, and EVAL's body in that context.  Type
  716.        is whatever you would like to associate with this encapsulation for
  717.        identification in case you need multiple encapsuations of the same
  718.        name.
  719.     EXT:UNENCAPSULATE
  720.        Removes name's most recent encapsulation of the specified type.
  721.     EXT:ENCAPSULATED-P
  722.        Returns t if name has an encapsulation of the given type, otherwise
  723.        nil.
  724.     EXT:*SETF-FDEFINITION-HOOK*
  725.        A list of functions invoked by (SETF FDEFINITION) before storing the
  726.        new value.  Each hook function must take the function name and the
  727.        new-value.
  728.  
  729. Hemlock:
  730.  -- Fixed the :FILE branch of "Help on Parse" to trim leading directory
  731.     components off the pathname if it wouldn't otherwise fit on the screen.
  732.  -- Fixed GET-EDITOR-TTY-INPUT to not assume that UNIX-READ will always work.
  733.  -- When we reallocate string table vectors to grow them, clear the old vector
  734.     so that it won't hold onto garbage (in case the vector was in static space,
  735.     but pointed to dynamic values.)  This was a major cause of memory leakage
  736.     in Hemlock.
  737.  -- Added a (setf (ts-stream-char-pos stream) 0) to the accept-input function
  738.     so that char-pos will be reset to zero whenever the user presses enter.
  739.  
  740. PCL:
  741.  -- The version has been updated to "5/1/90  May Day PCL (REV 4b)".
  742.  -- The Code walker now understands the real SYMBOL-MACROLET, and the PCL macro
  743.     definition is no longer used.
  744.  -- Fixed a bug in WALK-ARGLIST where it would ignore the rest of the current
  745.     arglist if the current arg destructured.  This was causing it to compile
  746.     forms like:
  747.         (macrolet ((foo ((a b) c) ...)) ...)
  748.     as:
  749.         (macrolet ((foo ((a b)) ...)) ...)
  750.     note the loss of the arg c.
  751.  
  752.  
  753. System:
  754.  
  755.  -- All the SAP-REF-<n> functions now take byte offsets.  Previously, the
  756.     16 and 32bit versions were scaled by the element size.
  757.  -- Fixed UNIX-IOCTL to not flame out of the cmd is a ub-32 instead of a sb-32.
  758.  -- Added Miles' TCSETPGRP, TCGETPGRP, and TTY-PROCESS-GROUP.
  759.  -- Unix syscalls are now more restrictive in the kind of arguments that they
  760.     accept.  In particular, UNIX:UNIX-READ, etc., no longer automatically
  761.     accept a vector (or string) argument.  You must use VECTOR-SAP to convert
  762.     the vector to a system area pointer.  Note that WITHOUT-GCING should be
  763.     wrapped around any syscall which is passed a pointer to the Lisp heap,
  764.     since the object might otherwise move doing the syscall.
  765.  -- Changed LOAD-FOREIGN to be exported from ALIEN.  Changed it have keyword
  766.     args instead of optionals.  Deleted obsolete linker argument.
  767.